// 函数管道: 将多个单参函数组合起来,形成一个新的函数

; (function () {
  //return
  let str = 'mY fIrST naME'
  // 将字符串中每一个单词首字母大写
  function firstLetterUp(str) {
    return str.replace(/\b(\w)(\w*)\b/g, function ($, $1, $2) {
      // console.log($,$1,$2);
      return $1.toUpperCase() + $2
    })
  }
  str = firstLetterUp(str)
  console.log(str);

  // 将字符串中除首字母之外全部小写
  function otherLetterLower(str) {
    return str.replace(/\b(\w)(\w*)\b/g, function ($, $1, $2) {
      // console.log($,$1,$2);
      return $1 + $2.toLowerCase()
    })
  }
  str = otherLetterLower(str)
  console.log(str)

  // 去除字符中的空白字符
  function removeEmpty(str) {
    return str.replace(/\s+/g, '')
  }
  str = removeEmpty(str)
  console.log(str)

  // 首字母小写
  function firstLetterLower(str) {
    return str.replace(/\b(\w)(\w*)\b/g, function ($, $1, $2) {
      // console.log($,$1,$2);
      return $1.toLowerCase() + $2
    })
  }
  str = firstLetterLower(str)
  console.log(str)


  // ============ 组合函数形成函数管道
  let myPlugin = {
    /**
     * 函数管道
     * @returns 
     */
    pipe() {
      let args = Array.from(arguments)
      return function (val) {
        for (let i = 0; i < args.length; i++) {
          const func = args[i]
          val = func(val)
        }
        return val
      }
    }
  }
  let smallCamel = myPlugin.pipe(firstLetterUp, otherLetterLower, removeEmpty,firstLetterLower)
  console.log(smallCamel('  mY fIrST naME'))
})();